PROP_Y_ALIGN
};
+static ClutterLayoutMeta *
+get_layout_meta (StBoxLayoutChild *self)
+{
+ ClutterChildMeta *meta = CLUTTER_CHILD_META (self);
+ ClutterActor *actor = clutter_child_meta_get_actor (meta);
+ ClutterContainer *container = clutter_child_meta_get_container (meta);
+ ClutterLayoutManager *layout = clutter_actor_get_layout_manager (CLUTTER_ACTOR (container));
+ return clutter_layout_manager_get_child_meta (layout, container, actor);
+}
+
static void
st_box_layout_child_get_property (GObject *object,
guint property_id,
GParamSpec *pspec)
{
StBoxLayoutChild *child = ST_BOX_LAYOUT_CHILD (object);
+ GObject *meta = G_OBJECT (get_layout_meta (child));
+ gboolean expand, fill;
+ ClutterBoxAlignment layout_align;
+ StAlign align;
switch (property_id)
{
case PROP_EXPAND:
- g_value_set_boolean (value, child->expand);
+ g_object_get (meta, "expand", &expand, NULL);
+ g_value_set_boolean (value, expand);
break;
case PROP_X_FILL:
- g_value_set_boolean (value, child->x_fill);
+ g_object_get (meta, "x-fill", &fill, NULL);
+ g_value_set_boolean (value, fill);
break;
case PROP_Y_FILL:
- g_value_set_boolean (value, child->y_fill);
+ g_object_get (meta, "y-fill", &fill, NULL);
+ g_value_set_boolean (value, fill);
break;
case PROP_X_ALIGN:
- g_value_set_enum (value, child->x_align);
- break;
case PROP_Y_ALIGN:
- g_value_set_enum (value, child->y_align);
+ g_object_get (meta, g_param_spec_get_name (pspec), &layout_align, NULL);
+ switch (layout_align)
+ {
+ case CLUTTER_BOX_ALIGNMENT_START:
+ align = ST_ALIGN_START;
+ break;
+ case CLUTTER_BOX_ALIGNMENT_CENTER:
+ align = ST_ALIGN_MIDDLE;
+ break;
+ case CLUTTER_BOX_ALIGNMENT_END:
+ align = ST_ALIGN_END;
+ }
+ g_value_set_enum (value, align);
break;
default:
GParamSpec *pspec)
{
StBoxLayoutChild *child = ST_BOX_LAYOUT_CHILD (object);
- StBoxLayout *box = ST_BOX_LAYOUT (CLUTTER_CHILD_META (object)->container);
+ GObject *meta = G_OBJECT (get_layout_meta (child));
+ ClutterBoxAlignment align;
switch (property_id)
{
case PROP_EXPAND:
- child->expand = g_value_get_boolean (value);
+ g_object_set (meta, "expand", g_value_get_boolean (value), NULL);
break;
case PROP_X_FILL:
- child->x_fill = g_value_get_boolean (value);
+ child->x_fill_set = TRUE;
+ g_object_set (meta, "x-fill", g_value_get_boolean (value), NULL);
break;
case PROP_Y_FILL:
- child->y_fill = g_value_get_boolean (value);
+ child->y_fill_set = TRUE;
+ g_object_set (meta, "y-fill", g_value_get_boolean (value), NULL);
break;
case PROP_X_ALIGN:
- child->x_align = g_value_get_enum (value);
- break;
case PROP_Y_ALIGN:
- child->y_align = g_value_get_enum (value);
+ switch (g_value_get_enum (value))
+ {
+ case ST_ALIGN_START:
+ align = CLUTTER_BOX_ALIGNMENT_START;
+ break;
+ case ST_ALIGN_MIDDLE:
+ align = CLUTTER_BOX_ALIGNMENT_CENTER;
+ break;
+ case ST_ALIGN_END:
+ align = CLUTTER_BOX_ALIGNMENT_END;
+ }
+ g_object_set (meta, g_param_spec_get_name (pspec), align, NULL);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
+}
- clutter_actor_queue_relayout ((ClutterActor*) box);
+static void
+st_box_layout_child_constructed (GObject *object)
+{
+ StBoxLayoutChild *child = ST_BOX_LAYOUT_CHILD (object);
+ GObject *meta = G_OBJECT (get_layout_meta (child));
+
+ if (!child->x_fill_set)
+ g_object_set (meta, "x-fill", TRUE, NULL);
+
+ if (!child->y_fill_set)
+ g_object_set (meta, "y-fill", TRUE, NULL);
+
+ G_OBJECT_CLASS (st_box_layout_child_parent_class)->constructed (object);
}
static void
object_class->get_property = st_box_layout_child_get_property;
object_class->set_property = st_box_layout_child_set_property;
+ object_class->constructed = st_box_layout_child_constructed;
pspec = g_param_spec_boolean ("expand", "Expand",
static void
st_box_layout_child_init (StBoxLayoutChild *self)
{
- self->expand = FALSE;
-
- self->x_fill = TRUE;
- self->y_fill = TRUE;
-
- self->x_align = ST_ALIGN_MIDDLE;
- self->y_align = ST_ALIGN_MIDDLE;
}
-